import Dayjs from 'dayjs'
import { ref, watch } from 'vue'
import { useBuilding } from '@/hooks/usebuilding'
import lieche from './lieche'
import { v4 as uuid } from 'uuid'
import { useAirCityStore } from '@/stores/aircity'
const AirCityStore = useAirCityStore()
/**
 * 全局状态
 */
//实时时间
export const date = ref<string>()
export const time = ref<string>()
export const week = ref<string>()
export const minute = ref<string>()

const weekMap = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日']
const get_Date_Time = () => {
	let date_time = Dayjs().format('YYYY-MM-DD/HH:mm:ss').split('/')
	date.value = date_time[0]
	time.value = date_time[1]
	week.value = weekMap[Dayjs().day() - 1]
	minute.value = Dayjs().format('YYYY-MM-DD/HH:mm')
}
setInterval(() => get_Date_Time(), 1000)

/**
 * 计算列车信息列表
 */
export const trainInfoList = ref<any>([])
export const getTrainInfoList = (tatol = 50) => {
	// const stations = ['长沙南站', '南京站', '北京站', '深圳北站', '武汉站', '厦门站']
	// const waitingArea = ['一层大厅', '二层大厅', '三层大厅', '二层候车室']
	// const entrances = ['A1', 'A2', 'B1', 'B2']
	// // let date = Dayjs()
	// let list: any = []
	// // for (let i = 0; i < tatol; i++) {
	// // 	date = date.add(5, 'minute')
	// // 	list.push({
	// // 		name: 'G' + (Math.floor(Math.random() * (7500 - 1234 + 1)) + 1234),
	// // 		end: stations[Math.floor(Math.random() * stations.length)],
	// // 		startTime: date.format('HH:mm'),
	// // 		wait: waitingArea[Math.floor(Math.random() * waitingArea.length)],
	// // 		entrance: entrances[Math.floor(Math.random() * entrances.length)],
	// // 		platform: Math.floor(Math.random() * 3 + 1),
	// // 		status: '候车中',
	// // 	})
	// // }
	lieche.sort((a: any, b: any) => {
		const startTime1 = Dayjs(date.value + '/' + a.startTime)
		const startTime2 = Dayjs(date.value + '/' + b.startTime)
		a.status = '候车中'
		return startTime1.isAfter(startTime2) ? 1 : -1
	})
	console.log('lieche-----', lieche)
	trainInfoList.value = lieche.filter((item: any) => {
		const startTime = Dayjs(Dayjs().format('YYYY-MM-DD') + '/' + item.startTime)

		const currTime = Dayjs().format('YYYY-MM-DD/HH:mm')
		let n = startTime.diff(currTime, 'minute')
		if (n < 15) {
			item.status = '正在检票'
		}
		if (n <= 0) {
			item.status = '已发车'
		}

		return startTime.isAfter(currTime)
	})
}
watch(minute, () => {
	if (!trainInfoList.value.length) return
	trainInfoList.value = trainInfoList.value.filter((item: any) => {
		const startTime = Dayjs(date.value + '/' + item.startTime)

		const currTime = Dayjs().format('YYYY-MM-DD/HH:mm')
		let n = startTime.diff(currTime, 'minute')
		if (n < 15) {
			item.status = '正在检票'
		}
		if (n <= 0) {
			item.status = '已发车'
		}
		return startTime.isAfter(currTime)
	})
})

/**
 *
 *  城市公交场站
 */
export const cityBusStationList = ref<any>([])
export const getCityBusStation = (tatol = 50) => {
	const stations = [
		'复兴门南',
		'富丰桥西',
		'南宫迎宾路',
		'丽泽桥',
		'明春苑',
		'广外关厢',
		'永合庄',
		'海户屯',
		'晓月苑公交场站',
		'航天桥西',
	]

	// let list: any = []
	// for (let i = 0; i < tatol; i++) {
	// 	list.push({
	// 		name: Math.floor(Math.random() * 100),
	// 		stationNum: Math.floor(Math.random() * 20),
	// 		area: stations[Math.floor(Math.random() * stations.length)],
	// 		stops: Math.floor(Math.random() * 10),
	// 	})
	// }
	let list = [
		{
			name: '北京公交夜16路',
			stationNum: Math.floor(Math.random() * 20),
			area: '南广场停车场1',
			stops: Math.floor(Math.random() * 10),
		},
		{
			name: '北京公交678路',
			stationNum: Math.floor(Math.random() * 20),
			area: '南广场停车场2',
			stops: Math.floor(Math.random() * 10),
		},
		{
			name: '北京公交477路',
			stationNum: Math.floor(Math.random() * 20),
			area: '站前P1停车场',
			stops: Math.floor(Math.random() * 10),
		},
		{
			name: '北京公交459路',
			stationNum: Math.floor(Math.random() * 20),
			area: '站前P2停车场',
			stops: Math.floor(Math.random() * 10),
		},
		{
			name: '北京公交395路',
			stationNum: Math.floor(Math.random() * 20),
			area: '站前P1停车场',
			stops: Math.floor(Math.random() * 10),
		},

		{
			name: '北京公交夜16路',
			stationNum: Math.floor(Math.random() * 20),
			area: '南广场停车场',
			stops: Math.floor(Math.random() * 10),
		},
	]
	cityBusStationList.value = list
	return cityBusStationList
}

/**
 *
 *  城市轨道线路
 */
export const cityBusLineList = ref<any>([])
export const getCityBusLine = (tatol = 50) => {
	// const stations = [
	// 	'复兴门南',
	// 	'富丰桥西',
	// 	'南宫迎宾路',
	// 	'丽泽桥',
	// 	'明春苑',
	// 	'广外关厢',
	// 	'永合庄',
	// 	'海户屯',
	// 	'晓月苑公交场站',
	// 	'航天桥西',
	// ]
	// let list: any = []
	// for (let i = 0; i < tatol; i++) {
	// 	const time1 = Math.floor(Math.random() * 30)
	// 	const startTime = Math.floor(Math.random() * 19) + 6
	// 	const endTime = startTime + Math.floor(Math.random() * 3) + 8
	// 	list.push({
	// 		name: Math.floor(Math.random() * 100) + '号线',
	// 		direction: stations[Math.floor(Math.random() * stations.length)],
	// 		time1: time1 + '分钟',
	// 		loadFactor1: Math.floor(Math.random() * 100) + '%',
	// 		time2: time1 + (Math.floor(Math.random() * 26) + 5) + '分钟',
	// 		loadFactor2: Math.floor(Math.random() * 100) + '%',
	// 		startTime: startTime + ':00',
	// 		endTime: (endTime > 24 ? 24 : endTime) + ':00',
	// 	})
	// }

	// let list = [
	// 	{
	// 		name: '北京公交395路',
	// 		direction: '复兴门南—富丰桥西',

	// 		loadFactor1: Math.floor(Math.random() * 100) + '%',

	// 		loadFactor2: Math.floor(Math.random() * 100) + '%',
	// 		startTime: '复兴门南 05:30-22:00',
	// 		endTime: '富丰桥西 05:30-21:00',
	// 	},
	// 	{
	// 		name: '北京公交459路',
	// 		direction: '南宫迎宾路—丽泽桥',

	// 		loadFactor1: Math.floor(Math.random() * 100) + '%',

	// 		loadFactor2: Math.floor(Math.random() * 100) + '%',
	// 		startTime: '南宫迎宾路 05:25-21:00',
	// 		endTime: ' 丽泽桥 06:30-22:00',
	// 	},
	// 	{
	// 		name: '北京公交477路',
	// 		direction: '明春苑—广外关厢',

	// 		loadFactor1: Math.floor(Math.random() * 100) + '%',

	// 		loadFactor2: Math.floor(Math.random() * 100) + '%',
	// 		startTime: '明春苑 05:20-22:00',
	// 		endTime: ' 广外关厢 06:20-23:00',
	// 	},
	// 	{
	// 		name: '北京公交678路',
	// 		direction: '永合庄—海户屯',

	// 		loadFactor1: Math.floor(Math.random() * 100) + '%',

	// 		loadFactor2: Math.floor(Math.random() * 100) + '%',
	// 		startTime: '永合庄 05:30-22:00',
	// 		endTime: '海户屯 06:30-23:00',
	// 	},
	// 	{
	// 		name: '北京公交夜16路',
	// 		direction: '晓月苑公交场站—航天桥西',

	// 		loadFactor1: Math.floor(Math.random() * 100) + '%',

	// 		loadFactor2: Math.floor(Math.random() * 100) + '%',
	// 		startTime: '晓月苑公交场站 23:20-04:50',
	// 		endTime: '航天桥西 23:20-04:50',
	// 	},
	// ]
	let list = [
		{
			name: '北京地铁10号线',
			direction: '巴沟—火器营',

			loadFactor1: Math.floor(Math.random() * 100) + '%',

			loadFactor2: Math.floor(Math.random() * 100) + '%',
			startTime: '首班车 5:55',
			endTime: '末班车 23:24',
		},
		{
			name: '北京地铁10号线',
			direction: '火器营—巴沟',
			loadFactor1: Math.floor(Math.random() * 100) + '%',
			loadFactor2: Math.floor(Math.random() * 100) + '%',
			startTime: '首班车 05:17',
			endTime: '末班车 23:02',
		},
		{
			name: '北京地铁16号线',
			direction: '宛平城—北安河',

			loadFactor1: Math.floor(Math.random() * 100) + '%',

			loadFactor2: Math.floor(Math.random() * 100) + '%',
			startTime: '首班车 05:15',
			endTime: '末班车 22:54',
		},
		{
			name: '北京地铁16号线',
			direction: '北安河—宛平城',

			loadFactor1: Math.floor(Math.random() * 100) + '%',

			loadFactor2: Math.floor(Math.random() * 100) + '%',
			startTime: '首班车 05:31',
			endTime: '末班车 22:52',
		},
	]
	list.forEach((item: any) => {
		const time1 = Math.floor(Math.random() * 30)
		item.time1 = time1 + '分钟'
		item.time2 = time1 + (Math.floor(Math.random() * 26) + 5) + '分钟'
	})
	cityBusLineList.value = list

	console.log(cityBusLineList.value, 'cityBusLineList.value ')

	return cityBusLineList
}

/**
 *客流模拟
 */
//通行记录
export const passRecord = ref<any>([])
export const getPassRecord = (tatol = 50) => {
	const use = ['NFC', '二维码', '身份证']
	let list: any = []
	let date = Dayjs()
	for (let i = 0; i < tatol; i++) {
		date = date.add(5, 'minute')
		list.push({
			use: use[Math.floor(Math.random() * use.length)],
			time: date.format('YYYY-MM-DD HH:mm:ss'),
		})
	}
	passRecord.value = list
	return passRecord
}

/**
 * 建筑分层
 */

//拆楼配置
const buildingOption: any = {
	layers: [''],
	spend: 50,
	displace: 0.5,
	totalDistance: 5,
	totalfloorDisplace: 35,
	floorSpend: 0.1,
	floorDisplace: 2,
	direction: 'east',
}
export let building: any = useBuilding(buildingOption as any)

export const buildingReset = () => {
	building = useBuilding(buildingOption as any)
	building.init()
}

//天气
export const sceneObj = ref({
	weatherMode: '晴天', //天气模式
	weatherTime: 33.3, //时间 百分比时间轴
	weatherColor: 5500, //色温值
	weatherContrast: 1, //对比度
	weatherSaturation: 1, //饱和度
	weatherBloomIntensity: 1, //泛光度
	IsDarknessMode: false, //黑暗模式
})

//定位标签

export const focusMarker = async (e: any) => {
	if (e.GroupID == 'marker3d-yongji') {
		await fdapi.marker.deleteByGroupId('kll')
		let m = {
			id: uuid(),
			groupId: 'kll',
			coordinate: e.MouseClickPoint, //坐标位置
			coordinateType: 0, //默认0是投影坐标系，也可以设置为经纬度空间坐标系值为1
			anchors: [-25, 80], //锚点，设置Marker的整体偏移，取值规则和imageSize设置的宽高有关，图片的左上角会对准标注点的坐标位置。示例设置规则：x=-imageSize.width/2，y=imageSize.height
			imageSize: [50, 80], //图片的尺寸
			// hoverImageSize: [50, 50], //鼠标悬停时显示的图片尺寸
			range: [0, 10000000], //可视范围
			viewHeightRange: [0, 1000000], // 可见高度范围
			rangeRatio: 0.01, //可见高度范围的调整系数
			imagePath: ``, //显示图片路径
			// hoverImagePath: HostConfig.Path + '/samples/images/hilightarea.png', // 鼠标悬停时显示的图片路径
			fixedSize: true, //图片固定尺寸，取值范围：false 自适应，近大远小，true 固定尺寸，默认值：false

			text: '', //显示的文字
			useTextAnimation: false, //关闭文字展开动画效果 打开会影响效率
			textRange: [0, 1000], //文本可视范围[近裁距离, 远裁距离]
			textOffset: [0, 0], // 文本偏移
			textBackgroundColor: Color.SpringGreen, //文本背景颜色
			fontSize: 24, //字体大小
			fontOutlineSize: 1, //字体轮廓线大小
			fontColor: Color.White, //字体颜色
			fontOutlineColor: Color.Black, //字体轮廓线颜色

			popupURL: `${window.origin}/popup/componentInfo.html?info=${e.UserData}&title=${'拥堵信息'}`, //弹窗HTML链接
			popupBackgroundColor: [1.0, 1.0, 1.0, 1], //弹窗背景颜色
			popupSize: [550, 550], //弹窗大小
			popupOffset: [60, 0], //弹窗偏移
			showLine: false, //标注点下方是否显示垂直牵引线
			lineSize: [2, 10], //垂直牵引线宽度和高度[width, height]
			lineColor: Color.SpringGreen, //垂直牵引线颜色
			lineOffset: [0, 0], //垂直牵引线偏移
			autoHidePopupWindow: true, //失去焦点后是否自动关闭弹出窗口
			autoHeight: false, // 自动判断下方是否有物体
			displayMode: 4, //智能显示模式  开发过程中请根据业务需求判断使用四种显示模式
			clusterByImage: true, // 聚合时是否根据图片路径分类，即当多个marker的imagePath路径参数相同时按路径对marker分类聚合
			priority: 0, //避让优先级
			occlusionCull: false, //是否参与遮挡剔除
		}
		await fdapi.marker.add(m)
		fdapi.marker.focus(m.id, 50, 1, [-60, -120, 0])
		fdapi.marker.showPopupWindow(m.id)
		return
	}

	if (e.GroupID == 'metro-marker') {
		let i = AirCityStore.animationList.findIndex((_: any) => _.name == e.Id)
		fdapi.camera.playAnimation(i)
		return
	}
	if (e.Type == 'marker') {
		fdapi.marker.focus(e.Id, 5)
	}
	if (e.Type == 'marker3d') {
		await fdapi.marker.deleteByGroupId('kll')
		let m = {
			id: uuid(),
			groupId: 'kll',
			coordinate: e.MouseClickPoint, //坐标位置
			coordinateType: 0, //默认0是投影坐标系，也可以设置为经纬度空间坐标系值为1
			anchors: [-25, 80], //锚点，设置Marker的整体偏移，取值规则和imageSize设置的宽高有关，图片的左上角会对准标注点的坐标位置。示例设置规则：x=-imageSize.width/2，y=imageSize.height
			imageSize: [50, 80], //图片的尺寸
			// hoverImageSize: [50, 50], //鼠标悬停时显示的图片尺寸
			range: [0, 10000000], //可视范围
			viewHeightRange: [0, 1000000], // 可见高度范围
			rangeRatio: 0.01, //可见高度范围的调整系数
			imagePath: ``, //显示图片路径
			// hoverImagePath: HostConfig.Path + '/samples/images/hilightarea.png', // 鼠标悬停时显示的图片路径
			fixedSize: true, //图片固定尺寸，取值范围：false 自适应，近大远小，true 固定尺寸，默认值：false

			text: '', //显示的文字
			useTextAnimation: false, //关闭文字展开动画效果 打开会影响效率
			textRange: [0, 1000], //文本可视范围[近裁距离, 远裁距离]
			textOffset: [0, 0], // 文本偏移
			textBackgroundColor: Color.SpringGreen, //文本背景颜色
			fontSize: 24, //字体大小
			fontOutlineSize: 1, //字体轮廓线大小
			fontColor: Color.White, //字体颜色
			fontOutlineColor: Color.Black, //字体轮廓线颜色

			popupURL: `${window.origin}/popup/equipmentInfo3.html`, //弹窗HTML链接
			popupBackgroundColor: [1.0, 1.0, 1.0, 1], //弹窗背景颜色
			popupSize: [450, 500], //弹窗大小
			popupOffset: [60, 0], //弹窗偏移
			showLine: false, //标注点下方是否显示垂直牵引线
			lineSize: [2, 10], //垂直牵引线宽度和高度[width, height]
			lineColor: Color.SpringGreen, //垂直牵引线颜色
			lineOffset: [0, 0], //垂直牵引线偏移
			autoHidePopupWindow: true, //失去焦点后是否自动关闭弹出窗口
			autoHeight: false, // 自动判断下方是否有物体
			displayMode: 4, //智能显示模式  开发过程中请根据业务需求判断使用四种显示模式
			clusterByImage: true, // 聚合时是否根据图片路径分类，即当多个marker的imagePath路径参数相同时按路径对marker分类聚合
			priority: 0, //避让优先级
			occlusionCull: false, //是否参与遮挡剔除
		}
		await fdapi.marker.add(m)
		fdapi.marker.focus(m.id, 50, 1, [-60, -120, 0])
		// fdapi.marker.showPopupWindow(m.id)
		// await fdapi.marker3d.focus(e.Id, 10, 1, [-60, -120, 0])
		// fdapi.marker3d.hide(e.Id)
	}
}
